package com.service;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;

import com.entity.UserModel;


	
public class UserModelService {
	
	 public static  Logger log = Logger.getLogger(UserModelService.class);
	/**
     * webscoket建立好链接之后的处理函数
     * @param session 当前websocket的会话id，打开一个websocket通过都会生成唯一的一个会话，可以通过该id进行发送消息到浏览器客户端
     * 保持连接的map容器
     */
	public static Map<String,WebSocketSession> users = new HashMap<String, WebSocketSession>();
	
	

	/**
	 * 向连接池中添加连接
	 *
	 * 
	 */
	public static void addUser(String userId,WebSocketSession sesson){
			users.put(userId, sesson);
	}
	/**
	 * 
	 * 方法名：removeMessageInbound
	 * 功能描述: 移除连接
	 *
	 * @param userId
	 * @param userModel
	 *
	 * 作者： 超哥
	 * 创建时间： 2016年8月15日 上午11:49:17
	 *
	 */
	public static void removeUser(String userId,WebSocketSession session){
		 users.remove(userId);
		 log.info("userId=="+userId+"已经成功移除");
	}
	
	
	/**
	 * 
	 * 方法名：sendMessageToUser
	 * 功能描述: 向特定用户发送数据
	 *
	 * @param user
	 * @param message
	 *
	 * 作者： 超哥
	 * 创建时间： 2016年8月15日 上午11:50:36
	 *
	 */
	public static void sendMessageToUser(String userId,String message){
		try {
			/**
			 *  向特定用户发送数据
			 */
			WebSocketSession session = users.get(userId);
		    WebSocketMessage<?> socketMessage = new TextMessage(message.getBytes());
			session.sendMessage(socketMessage);
			
		} catch (IOException e) {
			log.error("userId=="+userId+"发送数据异常");
			e.printStackTrace();
		}
	}
	
	/**
	 * 
	 * 方法名：sendMessageToAllUser
	 * 功能描述:向所有的用户发送数据
	 *
	 * @param message
	 *
	 * 作者： 超哥
	 * 创建时间： 2016年8月15日 下午2:03:13
	 * @throws UnsupportedEncodingException 
	 *
	 */
	public static void sendMessageToAllUser(String message) throws UnsupportedEncodingException{
		Set<String> keySet = users.keySet();
		for (String string : keySet) {
			   WebSocketSession session =	users.get(string);
				WebSocketMessage<?> mess = new TextMessage(message.getBytes("utf-8"));
				try {
				    if (session.isOpen()) {
				    	session.sendMessage(mess);
					}
					
				} catch (IOException e) {
					log.error("向所有用户发送数据出现异常");
				}
				
			
		}
		
		
		
	}
	
	
	/**
	 * 
	 * 方法名：getOnlineUser
	 * 功能描述: 获取在线的用户
	 *
	 *
	 * 作者： 超哥
	 * 创建时间： 2016年8月15日 上午11:38:48
	 *
	 */
	public static List<UserModel> getOnlineUserList(){
		 List<UserModel> models = new  ArrayList<UserModel>();
		 users.forEach((k,v)->{
			System.out.println("users=="+users);
			//(UserModel) v.getAttributes().get("userModel")
			UserModel  userModel = (UserModel) v.getAttributes().get("userModel");
			models.add(userModel);
		 });
		
	  return models;
		
	}
	public static List<String> getOnlineUser(){
		 List<String> models = new  ArrayList<String>();
		 users.forEach((k,v)->{
			System.out.println("users=="+users);
			//(UserModel) v.getAttributes().get("userModel")
			UserModel  userModel = (UserModel) v.getAttributes().get("userModel");
			models.add(userModel.getUserId());
		 });
		
	  return models;
		
	}
}
